import Vue from 'vue'
import Router from 'vue-router'
import { constantRouterMap, asyncRouterMap } from '@/config/router.config'
import defaultSettings from '@/config/defaultSettings'
import store from '@/store'
import { getParameterByName, addCookie, goSsoLogin } from '@/utils/util';
// hack router push callback
const originalPush = Router.prototype.push
Router.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}

Vue.use(Router)

const createRouter = () =>
  new Router({
    mode: 'hash',
    routes: constantRouterMap.concat(asyncRouterMap)
  })

const router = createRouter()

// 定义一个resetRouter 方法，在退出登录后或token过期后 需要重新登录时，调用即可
export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher
}
router.beforeEach(async (to, from, next) => {
  const ticket = getParameterByName('ticket')
  if (to.path == '/user/login') {
    if (ticket) {
      store.dispatch('checkToken', { ticket });
    } else {
      goSsoLogin();
    }
  } else {
    const result = await store.dispatch('isLogin')
    result == 1 ? next() : next('/user/login')
  }

});
export default router
